<?php
/**
 * Получить id объекта или создать новый по кодам класса и категории
 */
function objr_save_object($ext_id,$class_code,$class_mod,$class_name=null,$category_code=null,$category_name=null)
{
    $class_id =objr_save_class($class_code,$class_mod,$class_name);
    if (!is_null($category_code))
    {
        $category_id = objr_save_category_classid($class_id,$category_code,$category_name);
    }else
    {
        $category_id = null;
    }
    
    return objr_save_object_ids($ext_id,$class_id,$category_id);
}

/**
 * Получить id объекта или создать новый по id класса и категории
 */
function objr_save_object_ids($ext_id,$class_id,$category_id=null)
{
    $Processor = mst_getdatemod('objr','Processor');
    $obj = $Processor->query('sc_getObj_objects');
    $obj->setP($ext_id,'ext_id');
    $obj->setP($class_id,'class_id');
    $obj->setP($category_id,'category_id');
    $id = $Processor->query('saveObject',$obj);
    if (!$id)
    {
        mst_error('Ошибка sharpobj',"Процессор не создал объект {$ext_id} ({$class_id}, {$category_id}) или не вернул его id ",1);
        return false; 
    }
    if (sharpobj_iserror($id))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$id->getP('code')} {$id->getP('name')} {$id->getP('about')}",1);
        return false;
    }
    return sharpobj_conv_obj_int($id);
}

/**
 * Получить id класса или создать новый
 */
function objr_save_class($code,$mod,$name=null)
{
    $Processor = mst_getdatemod('objr','Processor');
    $obj = $Processor->query('sc_getObj_classes');
    $obj->setP($code,'code');
    $obj->setP($mod,'mod');
    $obj->setP($name,'name');
    $id = $Processor->query('saveClass',$obj);
    if (!$id)
    {
        mst_error('Ошибка sharpobj',"Процессор не создал объект {$code}:{$mod} {$name}) или не вернул его id ",1);
        return false; 
    }
    if (sharpobj_iserror($id ))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$id->getP('code')} {$id->getP('name')} {$id->getP('about')}",1);
        return false;
    }
    return sharpobj_conv_obj_int($id);
}

/**
 * Получить id категории или создать новую
 */
function objr_save_category($class_code,$class_mod,$code,$name=null)
{
    $class_id = objr_save_class($class_code,$class_mod);
    if (!$class_id)
    {
        return false;
    }
    return objr_save_category_classid($class_id,$code,$name);
}
/**
 * Получить id категории или создать новую
 */
function objr_save_category_classid($class_id,$code,$name=null)
{
    $Processor = mst_getdatemod('objr','Processor');
    $obj = $Processor->query('sc_getObj_categories');
    $obj->setP($class_id,'class_id');
    $obj->setP($code,'code');
    $obj->setP($name,'name');
    $id = $Processor->query('saveCategory',$obj);
    if (!$id)
    {
        mst_error('Ошибка sharpobj',"Процессор не создал объект {$class_id}:{$code} {$name}) или не вернул его id ",1);
        return false; 
    }
    if (sharpobj_iserror($id ))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$id->getP('code')} {$id->getP('name')} {$id->getP('about')}",1);
        return false;
    }
    return sharpobj_conv_obj_int($id);
}
?>